home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1999 November / SGI Freeware 1999 November - Disc 1.iso / dist / fw_cvs.idb / usr / freeware / info / cvs.info-2.z / cvs.info-2 (.txt)
GNU Info File  |  1999-04-16  |  50KB  |  870 lines

  1. This is Info file cvs.info, produced by Makeinfo version 1.67 from the
  2. input file ./cvs.texinfo.
  3. START-INFO-DIR-ENTRY
  4. * CVS: (cvs).          Concurrent Versions System
  5. END-INFO-DIR-ENTRY
  6.    Copyright (C) 1992, 1993 Signum Support AB Copyright (C) 1993, 1994
  7. Free Software Foundation, Inc.
  8.    Permission is granted to make and distribute verbatim copies of this
  9. manual provided the copyright notice and this permission notice are
  10. preserved on all copies.
  11.    Permission is granted to copy and distribute modified versions of
  12. this manual under the conditions for verbatim copying, provided also
  13. that the entire resulting derived work is distributed under the terms
  14. of a permission notice identical to this one.
  15.    Permission is granted to copy and distribute translations of this
  16. manual into another language, under the above conditions for modified
  17. versions, except that this permission notice may be stated in a
  18. translation approved by the Free Software Foundation.
  19. File: cvs.info,  Node: Backing up,  Next: Moving a repository,  Prev: Creating a repository,  Up: Repository
  20. Backing up a repository
  21. =======================
  22.    There is nothing particularly magical about the files in the
  23. repository; for the most part it is possible to back them up just like
  24. any other files.  However, there are a few issues to consider.
  25.    The first is that to be paranoid, one should either not use CVS
  26. during the backup, or have the backup program lock CVS while doing the
  27. backup.  To not use CVS, you might forbid logins to machines which can
  28. access the repository, turn off your CVS server, or similar mechanisms.
  29. The details would depend on your operating system and how you have CVS
  30. set up.  To lock CVS, you would create `#cvs.rfl' locks in each
  31. repository directory.  See *Note Concurrency::, for more on CVS locks.
  32. Having said all this, if you just back up without any of these
  33. precautions, the results are unlikely to be particularly dire.
  34. Restoring from backup, the repository might be in an inconsistent
  35. state, but this would not be particularly hard to fix manually.
  36.    When you restore a repository from backup, assuming that changes in
  37. the repository were made after the time of the backup, working
  38. directories which were not affected by the failure may refer to
  39. revisions which no longer exist in the repository.  Trying to run CVS
  40. in such directories will typically produce an error message.  One way
  41. to get those changes back into the repository is as follows:
  42.    * Get a new working directory.
  43.    * Copy the files from the working directory from before the failure
  44.      over to the new working directory (do not copy the contents of the
  45.      `CVS' directories, of course).
  46.    * Working in the new working directory, use commands such as `cvs
  47.      update' and `cvs diff' to figure out what has changed, and then
  48.      when you are ready, commit the changes into the repository.
  49. File: cvs.info,  Node: Moving a repository,  Next: Remote repositories,  Prev: Backing up,  Up: Repository
  50. Moving a repository
  51. ===================
  52.    Just as backing up the files in the repository is pretty much like
  53. backing up any other files, if you need to move a repository from one
  54. place to another it is also pretty much like just moving any other
  55. collection of files.
  56.    The main thing to consider is that working directories point to the
  57. repository.  The simplest way to deal with a moved repository is to
  58. just get a fresh working directory after the move.  Of course, you'll
  59. want to make sure that the old working directory had been checked in
  60. before the move, or you figured out some other way to make sure that
  61. you don't lose any changes.  If you really do want to reuse the existing
  62. working directory, it should be possible with manual surgery on the
  63. `CVS/Repository' files.  You can see *Note Working directory storage::,
  64. for information on the `CVS/Repository' and `CVS/Root' files, but
  65. unless you are sure you want to bother, it probably isn't worth it.
  66. File: cvs.info,  Node: Remote repositories,  Next: Read-only access,  Prev: Moving a repository,  Up: Repository
  67. Remote repositories
  68. ===================
  69.    Your working copy of the sources can be on a different machine than
  70. the repository.  Using CVS in this manner is known as "client/server"
  71. operation.  You run CVS on a machine which can mount your working
  72. directory, known as the "client", and tell it to communicate to a
  73. machine which can mount the repository, known as the "server".
  74. Generally, using a remote repository is just like using a local one,
  75. except that the format of the repository name is:
  76.      :METHOD:USER@HOSTNAME:/path/to/repository
  77.    The details of exactly what needs to be set up depend on how you are
  78. connecting to the server.
  79.    If METHOD is not specified, and the repository name contains `:',
  80. then the default is `ext' or `server', depending on your platform; both
  81. are described in *Note Connecting via rsh::.
  82. * Menu:
  83. * Server requirements::         Memory and other resources for servers
  84. * Connecting via rsh::          Using the `rsh' program to connect
  85. * Password authenticated::      Direct connections using passwords
  86. * GSSAPI authenticated::        Direct connections using GSSAPI
  87. * Kerberos authenticated::      Direct connections with kerberos
  88. File: cvs.info,  Node: Server requirements,  Next: Connecting via rsh,  Up: Remote repositories
  89. Server requirements
  90. -------------------
  91.    The quick answer to what sort of machine is suitable as a server is
  92. that requirements are modest--a server with 32M of memory or even less
  93. can handle a fairly large source tree with a fair amount of activity.
  94.    The real answer, of course, is more complicated.  Estimating the
  95. known areas of large memory consumption should be sufficient to
  96. estimate memory requirements.  There are two such areas documented
  97. here; other memory consumption should be small by comparison (if you
  98. find that is not the case, let us know, as described in *Note BUGS::,
  99. so we can update this documentation).
  100.    The first area of big memory consumption is large checkouts, when
  101. using the CVS server.  The server consists of two processes for each
  102. client that it is serving.  Memory consumption on the child process
  103. should remain fairly small.  Memory consumption on the parent process,
  104. particularly if the network connection to the client is slow, can be
  105. expected to grow to slightly more than the size of the sources in a
  106. single directory, or two megabytes, whichever is larger.
  107.    Multiplying the size of each CVS server by the number of servers
  108. which you expect to have active at one time should give an idea of
  109. memory requirements for the server.  For the most part, the memory
  110. consumed by the parent process probably can be swap space rather than
  111. physical memory.
  112.    The second area of large memory consumption is `diff', when checking
  113. in large files.  This is required even for binary files.  The rule of
  114. thumb is to allow about ten times the size of the largest file you will
  115. want to check in, although five times may be adequate.  For example, if
  116. you want to check in a file which is 10 megabytes, you should have 100
  117. megabytes of memory on the machine doing the checkin (the server
  118. machine for client/server, or the machine running CVS for
  119. non-client/server).  This can be swap space rather than physical
  120. memory.  Because the memory is only required briefly, there is no
  121. particular need to allow memory for more than one such checkin at a
  122. time.
  123.    Resource consumption for the client is even more modest--any machine
  124. with enough capacity to run the operating system in question should
  125. have little trouble.
  126.    For information on disk space requirements, see *Note Creating a
  127. repository::.
  128. File: cvs.info,  Node: Connecting via rsh,  Next: Password authenticated,  Prev: Server requirements,  Up: Remote repositories
  129. Connecting with rsh
  130. -------------------
  131.    CVS uses the `rsh' protocol to perform these operations, so the
  132. remote user host needs to have a `.rhosts' file which grants access to
  133. the local user.
  134.    For example, suppose you are the user `mozart' on the local machine
  135. `toe.grunge.com', and the server machine is `chainsaw.yard.com'.  On
  136. chainsaw, put the following line into the file `.rhosts' in `bach''s
  137. home directory:
  138.      toe.grunge.com  mozart
  139.    Then test that `rsh' is working with
  140.      rsh -l bach chainsaw.yard.com 'echo $PATH'
  141.    Next you have to make sure that `rsh' will be able to find the
  142. server.  Make sure that the path which `rsh' printed in the above
  143. example includes the directory containing a program named `cvs' which
  144. is the server.  You need to set the path in `.bashrc', `.cshrc', etc.,
  145. not `.login' or `.profile'.  Alternately, you can set the environment
  146. variable `CVS_SERVER' on the client machine to the filename of the
  147. server you want to use, for example `/usr/local/bin/cvs-1.6'.
  148.    There is no need to edit `inetd.conf' or start a CVS server daemon.
  149.    There are two access methods that you use in CVSROOT for rsh.
  150. `:server:' specifies an internal rsh client, which is supported only by
  151. some CVS ports.  `:ext:' specifies an external rsh program.  By default
  152. this is `rsh' but you may set the `CVS_RSH' environment variable to
  153. invoke another program which can access the remote server (for example,
  154. `remsh' on HP-UX 9 because `rsh' is something different).  It must be a
  155. program which can transmit data to and from the server without modifying
  156. it; for example the Windows NT `rsh' is not suitable since it by
  157. default translates between CRLF and LF.  The OS/2 CVS port has a hack
  158. to pass `-b' to `rsh' to get around this, but since this could
  159. potentially cause problems for programs other than the standard `rsh',
  160. it may change in the future.  If you set `CVS_RSH' to `SSH' or some
  161. other rsh replacement, the instructions in the rest of this section
  162. concerning `.rhosts' and so on are likely to be inapplicable; consult
  163. the documentation for your rsh replacement.
  164.    Continuing our example, supposing you want to access the module
  165. `foo' in the repository `/usr/local/cvsroot/', on machine
  166. `chainsaw.yard.com', you are ready to go:
  167.      cvs -d :ext:bach@chainsaw.yard.com:/usr/local/cvsroot checkout foo
  168.    (The `bach@' can be omitted if the username is the same on both the
  169. local and remote hosts.)
  170. File: cvs.info,  Node: Password authenticated,  Next: GSSAPI authenticated,  Prev: Connecting via rsh,  Up: Remote repositories
  171. Direct connection with password authentication
  172. ----------------------------------------------
  173.    The CVS client can also connect to the server using a password
  174. protocol.  This is particularly useful if using `rsh' is not feasible
  175. (for example, the server is behind a firewall), and Kerberos also is
  176. not available.
  177.    To use this method, it is necessary to make some adjustments on both
  178. the server and client sides.
  179. * Menu:
  180. * Password authentication server::     Setting up the server
  181. * Password authentication client::     Using the client
  182. * Password authentication security::   What this method does and does not do
  183. File: cvs.info,  Node: Password authentication server,  Next: Password authentication client,  Up: Password authenticated
  184. Setting up the server for password authentication
  185. .................................................
  186.    First of all, you probably want to tighten the permissions on the
  187. `$CVSROOT' and `$CVSROOT/CVSROOT' directories.  See *Note Password
  188. authentication security::, for more details.
  189.    On the server side, the file `/etc/inetd.conf' needs to be edited so
  190. `inetd' knows to run the command `cvs pserver' when it receives a
  191. connection on the right port.  By default, the port number is 2401; it
  192. would be different if your client were compiled with `CVS_AUTH_PORT'
  193. defined to something else, though.
  194.    If your `inetd' allows raw port numbers in `/etc/inetd.conf', then
  195. the following (all on a single line in `inetd.conf') should be
  196. sufficient:
  197.      2401  stream  tcp  nowait  root  /usr/local/bin/cvs
  198.      cvs --allow-root=/usr/cvsroot pserver
  199.    You could also use the `-T' option to specify a temporary directory.
  200.    The `--allow-root' option specifies the allowable CVSROOT directory.
  201. Clients which attempt to use a different CVSROOT directory will not be
  202. allowed to connect.  If there is more than one CVSROOT directory which
  203. you want to allow, repeat the option.
  204.    If your `inetd' wants a symbolic service name instead of a raw port
  205. number, then put this in `/etc/services':
  206.      cvspserver      2401/tcp
  207.    and put `cvspserver' instead of `2401' in `inetd.conf'.
  208.    Once the above is taken care of, restart your `inetd', or do
  209. whatever is necessary to force it to reread its initialization files.
  210.    Because the client stores and transmits passwords in cleartext
  211. (almost--see *Note Password authentication security::, for details), a
  212. separate CVS password file may be used, so people don't compromise their
  213. regular passwords when they access the repository.  This file is
  214. `$CVSROOT/CVSROOT/passwd' (*note Intro administrative files::.).  Its
  215. format is similar to `/etc/passwd', except that it only has two or
  216. three fields, username, password, and optional username for the server
  217. to use.  For example:
  218.      bach:ULtgRLXo7NRxs
  219.      cwang:1sOp854gDF3DY
  220.    The password is encrypted according to the standard Unix `crypt()'
  221. function, so it is possible to paste in passwords directly from regular
  222. Unix `passwd' files.
  223.    When authenticating a password, the server first checks for the user
  224. in the CVS `passwd' file.  If it finds the user, it compares against
  225. that password.  If it does not find the user, or if the CVS `passwd'
  226. file does not exist, then the server tries to match the password using
  227. the system's user-lookup routine (using the system's user-lookup
  228. routine can be disabled by setting `SystemAuth=no' in the config file,
  229. *note config::.).  When using the CVS `passwd' file, the server runs as
  230. the username specified in the third argument in the entry, or as the
  231. first argument if there is no third argument (in this way CVS allows
  232. imaginary usernames provided the CVS `passwd' file indicates
  233. corresponding valid system usernames).  In any case, CVS will have no
  234. privileges which the (valid) user would not have.
  235.    It is possible to "map" cvs-specific usernames onto system usernames
  236. (i.e., onto system login names) in the `$CVSROOT/CVSROOT/passwd' file
  237. by appending a colon and the system username after the password.  For
  238. example:
  239.      cvs:ULtgRLXo7NRxs:kfogel
  240.      generic:1sOp854gDF3DY:spwang
  241.      anyone:1sOp854gDF3DY:spwang
  242.    Thus, someone remotely accessing the repository on
  243. `chainsaw.yard.com' with the following command:
  244.      cvs -d :pserver:cvs@chainsaw.yard.com:/usr/local/cvsroot checkout foo
  245.    would end up running the server under the system identity kfogel,
  246. assuming successful authentication.  However, the remote user would not
  247. necessarily need to know kfogel's system password, as the
  248. `$CVSROOT/CVSROOT/passwd' file might contain a different password, used
  249. only for CVS.  And as the example above indicates, it is permissible to
  250. map multiple cvs usernames onto a single system username.
  251.    This feature is designed to allow people repository access without
  252. full system access (in particular, see *Note Read-only access::);
  253. however, also see *Note Password authentication security::.  Any sort of
  254. repository access very likely implies a degree of general system access
  255. as well.
  256.    Right now, the only way to put a password in the CVS `passwd' file
  257. is to paste it there from somewhere else.  Someday, there may be a `cvs
  258. passwd' command.
  259. File: cvs.info,  Node: Password authentication client,  Next: Password authentication security,  Prev: Password authentication server,  Up: Password authenticated
  260. Using the client with password authentication
  261. .............................................
  262.    Before connecting to the server, the client must "log in" with the
  263. command `cvs login'.  Logging in verifies a password with the server,
  264. and also records the password for later transactions with the server.
  265. The `cvs login' command needs to know the username, server hostname,
  266. and full repository path, and it gets this information from the
  267. repository argument or the `CVSROOT' environment variable.
  268.    `cvs login' is interactive -- it prompts for a password:
  269.      cvs -d :pserver:bach@chainsaw.yard.com:/usr/local/cvsroot login
  270.      CVS password:
  271.    The password is checked with the server; if it is correct, the
  272. `login' succeeds, else it fails, complaining that the password was
  273. incorrect.
  274.    Once you have logged in, you can force CVS to connect directly to
  275. the server and authenticate with the stored password:
  276.      cvs -d :pserver:bach@chainsaw.yard.com:/usr/local/cvsroot checkout foo
  277.    The `:pserver:' is necessary because without it, CVS will assume it
  278. should use `rsh' to connect with the server (*note Connecting via
  279. rsh::.).  (Once you have a working copy checked out and are running CVS
  280. commands from within it, there is no longer any need to specify the
  281. repository explicitly, because CVS records it in the working copy's
  282. `CVS' subdirectory.)
  283.    Passwords are stored by default in the file `$HOME/.cvspass'.  Its
  284. format is human-readable, but don't edit it unless you know what you
  285. are doing.  The passwords are not stored in cleartext, but are
  286. trivially encoded to protect them from "innocent" compromise (i.e.,
  287. inadvertently being seen by a system administrator who happens to look
  288. at that file).
  289.    The password for the currently choosen remote repository can be
  290. removed from the CVS_PASSFILE by using the `cvs logout' command.
  291.    The `CVS_PASSFILE' environment variable overrides this default.  If
  292. you use this variable, make sure you set it *before* `cvs login' is
  293. run.  If you were to set it after running `cvs login', then later CVS
  294. commands would be unable to look up the password for transmission to
  295. the server.
  296. File: cvs.info,  Node: Password authentication security,  Prev: Password authentication client,  Up: Password authenticated
  297. Security considerations with password authentication
  298. ....................................................
  299.    The passwords are stored on the client side in a trivial encoding of
  300. the cleartext, and transmitted in the same encoding.  The encoding is
  301. done only to prevent inadvertent password compromises (i.e., a system
  302. administrator accidentally looking at the file), and will not prevent
  303. even a naive attacker from gaining the password.
  304.    The separate CVS password file (*note Password authentication
  305. server::.) allows people to use a different password for repository
  306. access than for login access.  On the other hand, once a user has
  307. non-read-only access to the repository, she can execute programs on the
  308. server system through a variety of means.  Thus, repository access
  309. implies fairly broad system access as well.  It might be possible to
  310. modify CVS to prevent that, but no one has done so as of this writing.
  311. Furthermore, there may be other ways in which having access to CVS
  312. allows people to gain more general access to the system; no one has
  313. done a careful audit.
  314.    Note that because the `$CVSROOT/CVSROOT' directory contains `passwd'
  315. and other files which are used to check security, you must control the
  316. permissions on this directory as tightly as the permissions on `/etc'.
  317. The same applies to the `$CVSROOT' directory itself and any directory
  318. above it in the tree.  Anyone who has write access to such a directory
  319. will have the ability to become any user on the system.  Note that
  320. these permissions are typically tighter than you would use if you are
  321. not using pserver.
  322.    In summary, anyone who gets the password gets repository access, and
  323. some measure of general system access as well.  The password is
  324. available to anyone who can sniff network packets or read a protected
  325. (i.e., user read-only) file.  If you want real security, get Kerberos.
  326. File: cvs.info,  Node: GSSAPI authenticated,  Next: Kerberos authenticated,  Prev: Password authenticated,  Up: Remote repositories
  327. Direct connection with GSSAPI
  328. -----------------------------
  329.    GSSAPI is a generic interface to network security systems such as
  330. Kerberos 5.  If you have a working GSSAPI library, you can have CVS
  331. connect via a direct TCP connection, authenticating with GSSAPI.
  332.    To do this, CVS needs to be compiled with GSSAPI support; when
  333. configuring CVS it tries to detect whether GSSAPI libraries using
  334. kerberos version 5 are present.  You can also use the `--with-gssapi'
  335. flag to configure.
  336.    The connection is authenticated using GSSAPI, but the message stream
  337. is *not* authenticated by default.  You must use the `-a' global option
  338. to request stream authentication.
  339.    The data transmitted is *not* encrypted by default.  Encryption
  340. support must be compiled into both the client and the server; use the
  341. `--enable-encrypt' configure option to turn it on.  You must then use
  342. the `-x' global option to request encryption.
  343.    GSSAPI connections are handled on the server side by the same server
  344. which handles the password authentication server; see *Note Password
  345. authentication server::.  If you are using a GSSAPI mechanism such as
  346. Kerberos which provides for strong authentication, you will probably
  347. want to disable the ability to authenticate via cleartext passwords.
  348. To do so, create an empty `CVSROOT/passwd' password file, and set
  349. `SystemAuth=no' in the config file (*note config::.).
  350.    The GSSAPI server uses a principal name of cvs/HOSTNAME, where
  351. HOSTNAME is the canonical name of the server host.  You will have to
  352. set this up as required by your GSSAPI mechanism.
  353.    To connect using GSSAPI, use `:gserver:'.  For example,
  354.      cvs -d :gserver:chainsaw.yard.com:/usr/local/cvsroot checkout foo
  355. File: cvs.info,  Node: Kerberos authenticated,  Prev: GSSAPI authenticated,  Up: Remote repositories
  356. Direct connection with kerberos
  357. -------------------------------
  358.    The easiest way to use kerberos is to use the kerberos `rsh', as
  359. described in *Note Connecting via rsh::.  The main disadvantage of
  360. using rsh is that all the data needs to pass through additional
  361. programs, so it may be slower.  So if you have kerberos installed you
  362. can connect via a direct TCP connection, authenticating with kerberos.
  363.    This section concerns the kerberos network security system, version
  364. 4.  Kerberos version 5 is supported via the GSSAPI generic network
  365. security interface, as described in the previous section.
  366.    To do this, CVS needs to be compiled with kerberos support; when
  367. configuring CVS it tries to detect whether kerberos is present or you
  368. can use the `--with-krb4' flag to configure.
  369.    The data transmitted is *not* encrypted by default.  Encryption
  370. support must be compiled into both the client and server; use the
  371. `--enable-encryption' configure option to turn it on.  You must then
  372. use the `-x' global option to request encryption.
  373.    You need to edit `inetd.conf' on the server machine to run `cvs
  374. kserver'.  The client uses port 1999 by default; if you want to use
  375. another port specify it in the `CVS_CLIENT_PORT' environment variable
  376. on the client.
  377.    When you want to use CVS, get a ticket in the usual way (generally
  378. `kinit'); it must be a ticket which allows you to log into the server
  379. machine.  Then you are ready to go:
  380.      cvs -d :kserver:chainsaw.yard.com:/usr/local/cvsroot checkout foo
  381.    Previous versions of CVS would fall back to a connection via rsh;
  382. this version will not do so.
  383. File: cvs.info,  Node: Read-only access,  Next: Server temporary directory,  Prev: Remote repositories,  Up: Repository
  384. Read-only repository access
  385. ===========================
  386.    It is possible to grant read-only repository access to people using
  387. the password-authenticated server (*note Password authenticated::.).
  388. (The other access methods do not have explicit support for read-only
  389. users because those methods all assume login access to the repository
  390. machine anyway, and therefore the user can do whatever local file
  391. permissions allow her to do.)
  392.    A user who has read-only access can do only those CVS operations
  393. which do not modify the repository, except for certain "administrative"
  394. files (such as lock files and the history file).  It may be desirable
  395. to use this feature in conjunction with user-aliasing (*note Password
  396. authentication server::.).
  397.    Unlike with previous versions of CVS, read-only users should be able
  398. merely to read the repository, and not to execute programs on the
  399. server or otherwise gain unexpected levels of access.  Or to be more
  400. accurate, the *known* holes have been plugged.  Because this feature is
  401. new and has not received a comprehensive security audit, you should use
  402. whatever level of caution seems warranted given your attitude concerning
  403. security.
  404.    There are two ways to specify read-only access for a user: by
  405. inclusion, and by exclusion.
  406.    "Inclusion" means listing that user specifically in the
  407. `$CVSROOT/CVSROOT/readers' file, which is simply a newline-separated
  408. list of users.  Here is a sample `readers' file:
  409.      melissa
  410.      splotnik
  411.      jrandom
  412.    (Don't forget the newline after the last user.)
  413.    "Exclusion" means explicitly listing everyone who has *write*
  414. access--if the file
  415.      $CVSROOT/CVSROOT/writers
  416. exists, then only those users listed in it have write access, and
  417. everyone else has read-only access (of course, even the read-only users
  418. still need to be listed in the CVS `passwd' file).  The `writers' file
  419. has the same format as the `readers' file.
  420.    Note: if your CVS `passwd' file maps cvs users onto system users
  421. (*note Password authentication server::.), make sure you deny or grant
  422. read-only access using the *cvs* usernames, not the system usernames.
  423. That is, the `readers' and `writers' files contain cvs usernames, which
  424. may or may not be the same as system usernames.
  425.    Here is a complete description of the server's behavior in deciding
  426. whether to grant read-only or read-write access:
  427.    If `readers' exists, and this user is listed in it, then she gets
  428. read-only access.  Or if `writers' exists, and this user is NOT listed
  429. in it, then she also gets read-only access (this is true even if
  430. `readers' exists but she is not listed there).  Otherwise, she gets
  431. full read-write access.
  432.    Of course there is a conflict if the user is listed in both files.
  433. This is resolved in the more conservative way, it being better to
  434. protect the repository too much than too little: such a user gets
  435. read-only access.
  436. File: cvs.info,  Node: Server temporary directory,  Prev: Read-only access,  Up: Repository
  437. Temporary directories for the server
  438. ====================================
  439.    While running, the CVS server creates temporary directories.  They
  440. are named
  441.      cvs-servPID
  442. where PID is the process identification number of the server.  They are
  443. located in the directory specified by the `TMPDIR' environment variable
  444. (*note Environment variables::.), the `-T' global option (*note Global
  445. options::.), or failing that `/tmp'.
  446.    In most cases the server will remove the temporary directory when it
  447. is done, whether it finishes normally or abnormally.  However, there
  448. are a few cases in which the server does not or cannot remove the
  449. temporary directory, for example:
  450.    * If the server aborts due to an internal server error, it may
  451.      preserve the directory to aid in debugging
  452.    * If the server is killed in a way that it has no way of cleaning up
  453.      (most notably, `kill -KILL' on unix).
  454.    * If the system shuts down without an orderly shutdown, which tells
  455.      the server to clean up.
  456.    In cases such as this, you will need to manually remove the
  457. `cvs-servPID' directories.  As long as there is no server running with
  458. process identification number PID, it is safe to do so.
  459. File: cvs.info,  Node: Starting a new project,  Next: Revisions,  Prev: Repository,  Up: Top
  460. Starting a project with CVS
  461. ***************************
  462.    Because renaming files and moving them between directories is
  463. somewhat inconvenient, the first thing you do when you start a new
  464. project should be to think through your file organization.  It is not
  465. impossible to rename or move files, but it does increase the potential
  466. for confusion and CVS does have some quirks particularly in the area of
  467. renaming directories.  *Note Moving files::.
  468.    What to do next depends on the situation at hand.
  469. * Menu:
  470. * Setting up the files::        Getting the files into the repository
  471. * Defining the module::         How to make a module of the files
  472. File: cvs.info,  Node: Setting up the files,  Next: Defining the module,  Up: Starting a new project
  473. Setting up the files
  474. ====================
  475.    The first step is to create the files inside the repository.  This
  476. can be done in a couple of different ways.
  477. * Menu:
  478. * From files::                  This method is useful with old projects
  479.                                 where files already exists.
  480. * From other version control systems::  Old projects where you want to
  481.                                         preserve history from another system.
  482. * From scratch::                Creating a directory tree from scratch.
  483. File: cvs.info,  Node: From files,  Next: From other version control systems,  Up: Setting up the files
  484. Creating a directory tree from a number of files
  485. ------------------------------------------------
  486.    When you begin using CVS, you will probably already have several
  487. projects that can be put under CVS control.  In these cases the easiest
  488. way is to use the `import' command.  An example is probably the easiest
  489. way to explain how to use it.  If the files you want to install in CVS
  490. reside in `WDIR', and you want them to appear in the repository as
  491. `$CVSROOT/yoyodyne/RDIR', you can do this:
  492.      $ cd WDIR
  493.      $ cvs import -m "Imported sources" yoyodyne/RDIR yoyo start
  494.    Unless you supply a log message with the `-m' flag, CVS starts an
  495. editor and prompts for a message.  The string `yoyo' is a "vendor tag",
  496. and `start' is a "release tag".  They may fill no purpose in this
  497. context, but since CVS requires them they must be present.  *Note
  498. Tracking sources::, for more information about them.
  499.    You can now verify that it worked, and remove your original source
  500. directory.
  501.      $ cd ..
  502.      $ mv DIR DIR.orig
  503.      $ cvs checkout yoyodyne/DIR       # Explanation below
  504.      $ diff -r DIR.orig yoyodyne/DIR
  505.      $ rm -r DIR.orig
  506. Erasing the original sources is a good idea, to make sure that you do
  507. not accidentally edit them in DIR, bypassing CVS.  Of course, it would
  508. be wise to make sure that you have a backup of the sources before you
  509. remove them.
  510.    The `checkout' command can either take a module name as argument (as
  511. it has done in all previous examples) or a path name relative to
  512. `$CVSROOT', as it did in the example above.
  513.    It is a good idea to check that the permissions CVS sets on the
  514. directories inside `$CVSROOT' are reasonable, and that they belong to
  515. the proper groups.  *Note File permissions::.
  516.    If some of the files you want to import are binary, you may want to
  517. use the wrappers features to specify which files are binary and which
  518. are not.  *Note Wrappers::.
  519. File: cvs.info,  Node: From other version control systems,  Next: From scratch,  Prev: From files,  Up: Setting up the files
  520. Creating Files From Other Version Control Systems
  521. -------------------------------------------------
  522.    If you have a project which you are maintaining with another version
  523. control system, such as RCS, you may wish to put the files from that
  524. project into CVS, and preserve the revision history of the files.
  525. From RCS
  526.      If you have been using RCS, find the RCS files--usually a file
  527.      named `foo.c' will have its RCS file in `RCS/foo.c,v' (but it
  528.      could be other places; consult the RCS documentation for details).
  529.      Then create the appropriate directories in CVS if they do not
  530.      already exist.  Then copy the files into the appropriate
  531.      directories in the CVS repository (the name in the repository must
  532.      be the name of the source file with `,v' added; the files go
  533.      directly in the appopriate directory of the repository, not in an
  534.      `RCS' subdirectory).  This is one of the few times when it is a
  535.      good idea to access the CVS repository directly, rather than using
  536.      CVS commands.  Then you are ready to check out a new working
  537.      directory.
  538.      The RCS file should not be locked when you move it into CVS; if it
  539.      is, CVS will have trouble letting you operate on it.
  540. From another version control system
  541.      Many version control systems have the ability to export RCS files
  542.      in the standard format.  If yours does, export the RCS files and
  543.      then follow the above instructions.
  544.      Failing that, probably your best bet is to write a script that
  545.      will check out the files one revision at a time using the command
  546.      line interface to the other system, and then check the revisions
  547.      into CVS.  The `sccs2rcs' script mentioned below may be a useful
  548.      example to follow.
  549. From SCCS
  550.      There is a script in the `contrib' directory of the CVS source
  551.      distribution called `sccs2rcs' which converts SCCS files to RCS
  552.      files.  Note: you must run it on a machine which has both SCCS and
  553.      RCS installed, and like everything else in contrib it is
  554.      unsupported (your mileage may vary).
  555. From PVCS
  556.      There is a script in the `contrib' directory of the CVS source
  557.      distribution called `pvcs_to_rcs' which converts PVCS archives to
  558.      RCS files.  You must run it on a machine which has both PVCS and
  559.      RCS installed, and like everything else in contrib it is
  560.      unsupported (your mileage may vary).  See the comments in the
  561.      script for details.
  562. File: cvs.info,  Node: From scratch,  Prev: From other version control systems,  Up: Setting up the files
  563. Creating a directory tree from scratch
  564. --------------------------------------
  565.    For a new project, the easiest thing to do is probably to create an
  566. empty directory structure, like this:
  567.      $ mkdir tc
  568.      $ mkdir tc/man
  569.      $ mkdir tc/testing
  570.    After that, you use the `import' command to create the corresponding
  571. (empty) directory structure inside the repository:
  572.      $ cd tc
  573.      $ cvs import -m "Created directory structure" yoyodyne/DIR yoyo start
  574.    Then, use `add' to add files (and new directories) as they appear.
  575.    Check that the permissions CVS sets on the directories inside
  576. `$CVSROOT' are reasonable.
  577. File: cvs.info,  Node: Defining the module,  Prev: Setting up the files,  Up: Starting a new project
  578. Defining the module
  579. ===================
  580.    The next step is to define the module in the `modules' file.  This
  581. is not strictly necessary, but modules can be convenient in grouping
  582. together related files and directories.
  583.    In simple cases these steps are sufficient to define a module.
  584.   1. Get a working copy of the modules file.
  585.           $ cvs checkout CVSROOT/modules
  586.           $ cd CVSROOT
  587.   2. Edit the file and insert a line that defines the module.  *Note
  588.      Intro administrative files::, for an introduction.  *Note
  589.      modules::, for a full description of the modules file.  You can
  590.      use the following line to define the module `tc':
  591.           tc   yoyodyne/tc
  592.   3. Commit your changes to the modules file.
  593.           $ cvs commit -m "Added the tc module." modules
  594.   4. Release the modules module.
  595.           $ cd ..
  596.           $ cvs release -d CVSROOT
  597. File: cvs.info,  Node: Revisions,  Next: Branching and merging,  Prev: Starting a new project,  Up: Top
  598. Revisions
  599. *********
  600.    For many uses of CVS, one doesn't need to worry too much about
  601. revision numbers; CVS assigns numbers such as `1.1', `1.2', and so on,
  602. and that is all one needs to know.  However, some people prefer to have
  603. more knowledge and control concerning how CVS assigns revision numbers.
  604.    If one wants to keep track of a set of revisions involving more than
  605. one file, such as which revisions went into a particular release, one
  606. uses a "tag", which is a symbolic revision which can be assigned to a
  607. numeric revision in each file.
  608. * Menu:
  609. * Revision numbers::            The meaning of a revision number
  610. * Versions revisions releases::  Terminology used in this manual
  611. * Assigning revisions::         Assigning revisions
  612. * Tags::                        Tags-Symbolic revisions
  613. * Sticky tags::                 Certain tags are persistent
  614. File: cvs.info,  Node: Revision numbers,  Next: Versions revisions releases,  Up: Revisions
  615. Revision numbers
  616. ================
  617.    Each version of a file has a unique "revision number".  Revision
  618. numbers look like `1.1', `1.2', `1.3.2.2' or even `1.3.2.2.4.5'.  A
  619. revision number always has an even number of period-separated decimal
  620. integers.  By default revision 1.1 is the first revision of a file.
  621. Each successive revision is given a new number by increasing the
  622. rightmost number by one.  The following figure displays a few
  623. revisions, with newer revisions to the right.
  624.             +-----+    +-----+    +-----+    +-----+    +-----+
  625.             ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 !
  626.             +-----+    +-----+    +-----+    +-----+    +-----+
  627.    It is also possible to end up with numbers containing more than one
  628. period, for example `1.3.2.2'.  Such revisions represent revisions on
  629. branches (*note Branching and merging::.); such revision numbers are
  630. explained in detail in *Note Branches and revisions::.
  631. File: cvs.info,  Node: Versions revisions releases,  Next: Assigning revisions,  Prev: Revision numbers,  Up: Revisions
  632. Versions, revisions and releases
  633. ================================
  634.    A file can have several versions, as described above.  Likewise, a
  635. software product can have several versions.  A software product is
  636. often given a version number such as `4.1.1'.
  637.    Versions in the first sense are called "revisions" in this document,
  638. and versions in the second sense are called "releases".  To avoid
  639. confusion, the word "version" is almost never used in this document.
  640. File: cvs.info,  Node: Assigning revisions,  Next: Tags,  Prev: Versions revisions releases,  Up: Revisions
  641. Assigning revisions
  642. ===================
  643.    By default, CVS will assign numeric revisions by leaving the first
  644. number the same and incrementing the second number.  For example,
  645. `1.1', `1.2', `1.3', etc.
  646.    When adding a new file, the second number will always be one and the
  647. first number will equal the highest first number of any file in that
  648. directory.  For example, the current directory contains files whose
  649. highest numbered revisions are `1.7', `3.1', and `4.12', then an added
  650. file will be given the numeric revision `4.1'.
  651.    Normally there is no reason to care about the revision numbers--it
  652. is easier to treat them as internal numbers that CVS maintains, and tags
  653. provide a better way to distinguish between things like release 1
  654. versus release 2 of your product (*note Tags::.).  However, if you want
  655. to set the numeric revisions, the `-r' option to `cvs commit' can do
  656. that.  The `-r' option implies the `-f' option, in the sense that it
  657. causes the files to be committed even if they are not modified.
  658.    For example, to bring all your files up to revision 3.0 (including
  659. those that haven't changed), you might invoke:
  660.      $ cvs commit -r 3.0
  661.    Note that the number you specify with `-r' must be larger than any
  662. existing revision number.  That is, if revision 3.0 exists, you cannot
  663. `cvs commit -r 1.3'.  If you want to maintain several releases in
  664. parallel, you need to use a branch (*note Branching and merging::.).
  665. File: cvs.info,  Node: Tags,  Next: Sticky tags,  Prev: Assigning revisions,  Up: Revisions
  666. Tags-Symbolic revisions
  667. =======================
  668.    The revision numbers live a life of their own.  They need not have
  669. anything at all to do with the release numbers of your software
  670. product.  Depending on how you use CVS the revision numbers might
  671. change several times between two releases.  As an example, some of the
  672. source files that make up RCS 5.6 have the following revision numbers:
  673.      ci.c            5.21
  674.      co.c            5.9
  675.      ident.c         5.3
  676.      rcs.c           5.12
  677.      rcsbase.h       5.11
  678.      rcsdiff.c       5.10
  679.      rcsedit.c       5.11
  680.      rcsfcmp.c       5.9
  681.      rcsgen.c        5.10
  682.      rcslex.c        5.11
  683.      rcsmap.c        5.2
  684.      rcsutil.c       5.10
  685.    You can use the `tag' command to give a symbolic name to a certain
  686. revision of a file.  You can use the `-v' flag to the `status' command
  687. to see all tags that a file has, and which revision numbers they
  688. represent.  Tag names must start with an uppercase or lowercase letter
  689. and can contain uppercase and lowercase letters, digits, `-', and `_'.
  690. The two tag names `BASE' and `HEAD' are reserved for use by CVS.  It is
  691. expected that future names which are special to CVS will be specially
  692. named, for example by starting with `.', rather than being named
  693. analogously to `BASE' and `HEAD', to avoid conflicts with actual tag
  694. names.
  695.    You'll want to choose some convention for naming tags, based on
  696. information such as the name of the program and the version number of
  697. the release.  For example, one might take the name of the program,
  698. immediately followed by the version number with `.' changed to `-', so
  699. that CVS 1.9 would be tagged with the name `cvs1-9'.  If you choose a
  700. consistent convention, then you won't constantly be guessing whether a
  701. tag is `cvs-1-9' or `cvs1_9' or what.  You might even want to consider
  702. enforcing your convention in the taginfo file (*note user-defined
  703. logging::.).
  704.    The following example shows how you can add a tag to a file.  The
  705. commands must be issued inside your working copy of the module.  That
  706. is, you should issue the command in the directory where `backend.c'
  707. resides.
  708.      $ cvs tag rel-0-4 backend.c
  709.      T backend.c
  710.      $ cvs status -v backend.c
  711.      ===================================================================
  712.      File: backend.c         Status: Up-to-date
  713.      
  714.          Version:            1.4     Tue Dec  1 14:39:01 1992
  715.          RCS Version:        1.4     /u/cvsroot/yoyodyne/tc/backend.c,v
  716.          Sticky Tag:         (none)
  717.          Sticky Date:        (none)
  718.          Sticky Options:     (none)
  719.      
  720.          Existing Tags:
  721.              rel-0-4                     (revision: 1.4)
  722.    There is seldom reason to tag a file in isolation.  A more common
  723. use is to tag all the files that constitute a module with the same tag
  724. at strategic points in the development life-cycle, such as when a
  725. release is made.
  726.      $ cvs tag rel-1-0 .
  727.      cvs tag: Tagging .
  728.      T Makefile
  729.      T backend.c
  730.      T driver.c
  731.      T frontend.c
  732.      T parser.c
  733.    (When you give CVS a directory as argument, it generally applies the
  734. operation to all the files in that directory, and (recursively), to any
  735. subdirectories that it may contain.  *Note Recursive behavior::.)
  736.    The `checkout' command has a flag, `-r', that lets you check out a
  737. certain revision of a module.  This flag makes it easy to retrieve the
  738. sources that make up release 1.0 of the module `tc' at any time in the
  739. future:
  740.      $ cvs checkout -r rel-1-0 tc
  741. This is useful, for instance, if someone claims that there is a bug in
  742. that release, but you cannot find the bug in the current working copy.
  743.    You can also check out a module as it was at any given date.  *Note
  744. checkout options::.
  745.    When you tag more than one file with the same tag you can think
  746. about the tag as "a curve drawn through a matrix of filename vs.
  747. revision number."  Say we have 5 files with the following revisions:
  748.              file1   file2   file3   file4   file5
  749.      
  750.              1.1     1.1     1.1     1.1  /--1.1*      <-*-  TAG
  751.              1.2*-   1.2     1.2    -1.2*-
  752.              1.3  \- 1.3*-   1.3   / 1.3
  753.              1.4          \  1.4  /  1.4
  754.                            \-1.5*-   1.5
  755.                              1.6
  756.    At some time in the past, the `*' versions were tagged.  You can
  757. think of the tag as a handle attached to the curve drawn through the
  758. tagged revisions.  When you pull on the handle, you get all the tagged
  759. revisions.  Another way to look at it is that you "sight" through a set
  760. of revisions that is "flat" along the tagged revisions, like this:
  761.              file1   file2   file3   file4   file5
  762.      
  763.                              1.1
  764.                              1.2
  765.                      1.1     1.3                       _
  766.              1.1     1.2     1.4     1.1              /
  767.              1.2*----1.3*----1.5*----1.2*----1.1     (--- <--- Look here
  768.              1.3             1.6     1.3              \_
  769.              1.4                     1.4
  770.                                      1.5
  771. File: cvs.info,  Node: Sticky tags,  Prev: Tags,  Up: Revisions
  772. Sticky tags
  773. ===========
  774.    Sometimes a working copy's revision has extra data associated with
  775. it, for example it might be on a branch (*note Branching and
  776. merging::.), or restricted to versions prior to a certain date by
  777. `checkout -D' or `update -D'.  Because this data persists - that is, it
  778. applies to subsequent commands in the working copy - we refer to it as
  779. "sticky".
  780.    Most of the time, stickiness is an obscure aspect of CVS that you
  781. don't need to think about.  However, even if you don't want to use the
  782. feature, you may need to know *something* about sticky tags (for
  783. example, how to avoid them!).
  784.    You can use the `status' command to see if any sticky tags or dates
  785. are set:
  786.      $ cvs status driver.c
  787.      ===================================================================
  788.      File: driver.c          Status: Up-to-date
  789.      
  790.          Version:            1.7.2.1 Sat Dec  5 19:35:03 1992
  791.          RCS Version:        1.7.2.1 /u/cvsroot/yoyodyne/tc/driver.c,v
  792.          Sticky Tag:         rel-1-0-patches (branch: 1.7.2)
  793.          Sticky Date:        (none)
  794.          Sticky Options:     (none)
  795.    The sticky tags will remain on your working files until you delete
  796. them with `cvs update -A'.  The `-A' option retrieves the version of
  797. the file from the head of the trunk, and forgets any sticky tags,
  798. dates, or options.
  799.    The most common use of sticky tags is to identify which branch one
  800. is working on, as described in *Note Accessing branches::.  However,
  801. non-branch sticky tags have uses as well.  For example, suppose that
  802. you want to avoid updating your working directory, to isolate yourself
  803. from possibly destabilizing changes other people are making.  You can,
  804. of course, just refrain from running `cvs update'.  But if you want to
  805. avoid updating only a portion of a larger tree, then sticky tags can
  806. help.  If you check out a certain revision (such as 1.4) it will become
  807. sticky.  Subsequent `cvs update' commands will not retrieve the latest
  808. revision until you reset the tag with `cvs update -A'.  Likewise, use
  809. of the `-D' option to `update' or `checkout' sets a "sticky date",
  810. which, similarly, causes that date to be used for future retrievals.
  811.    Many times you will want to retrieve an old version of a file
  812. without setting a sticky tag.  The way to do that is with the `-p'
  813. option to `checkout' or `update', which sends the contents of the file
  814. to standard output.  For example, suppose you have a file named `file1'
  815. which existed as revision 1.1, and you then removed it (thus adding a
  816. dead revision 1.2).  Now suppose you want to add it again, with the same
  817. contents it had previously.  Here is how to do it:
  818.      $ cvs update -p -r 1.1 file1 >file1
  819.      ===================================================================
  820.      Checking out file1
  821.      RCS:  /tmp/cvs-sanity/cvsroot/first-dir/Attic/file1,v
  822.      VERS: 1.1
  823.      ***************
  824.      $ cvs add file1
  825.      cvs add: re-adding file file1 (in place of dead revision 1.2)
  826.      cvs add: use 'cvs commit' to add this file permanently
  827.      $ cvs commit -m test
  828.      Checking in file1;
  829.      /tmp/cvs-sanity/cvsroot/first-dir/file1,v  <--  file1
  830.      new revision: 1.3; previous revision: 1.2
  831.      done
  832.      $
  833. File: cvs.info,  Node: Branching and merging,  Next: Recursive behavior,  Prev: Revisions,  Up: Top
  834. Branching and merging
  835. *********************
  836.    CVS allows you to isolate changes onto a separate line of
  837. development, known as a "branch".  When you change files on a branch,
  838. those changes do not appear on the main trunk or other branches.
  839.    Later you can move changes from one branch to another branch (or the
  840. main trunk) by "merging".  Merging involves first running `cvs update
  841. -j', to merge the changes into the working directory.  You can then
  842. commit that revision, and thus effectively copy the changes onto
  843. another branch.
  844. * Menu:
  845. * Branches motivation::         What branches are good for
  846. * Creating a branch::           Creating a branch
  847. * Accessing branches::          Checking out and updating branches
  848. * Branches and revisions::      Branches are reflected in revision numbers
  849. * Magic branch numbers::        Magic branch numbers
  850. * Merging a branch::            Merging an entire branch
  851. * Merging more than once::      Merging from a branch several times
  852. * Merging two revisions::       Merging differences between two revisions
  853. * Merging adds and removals::   What if files are added or removed?
  854. File: cvs.info,  Node: Branches motivation,  Next: Creating a branch,  Up: Branching and merging
  855. What branches are good for
  856. ==========================
  857.    Suppose that release 1.0 of tc has been made.  You are continuing to
  858. develop tc, planning to create release 1.1 in a couple of months.
  859. After a while your customers start to complain about a fatal bug.  You
  860. check out release 1.0 (*note Tags::.) and find the bug (which turns out
  861. to have a trivial fix).  However, the current revision of the sources
  862. are in a state of flux and are not expected to be stable for at least
  863. another month.  There is no way to make a bugfix release based on the
  864. newest sources.
  865.    The thing to do in a situation like this is to create a "branch" on
  866. the revision trees for all the files that make up release 1.0 of tc.
  867. You can then make modifications to the branch without disturbing the
  868. main trunk.  When the modifications are finished you can elect to
  869. either incorporate them on the main trunk, or leave them on the branch.
  870.